package co.yixiang.modules.shop.domain;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
* @author hupeng
* @date 2020-05-12
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@TableName("yx_user")
public class YxUser implements Serializable {

    /**
     * 用户状态, 正常
     */
    public static final Integer STATUS_NORMAL = 1;

    /**
     * 用户状态, 禁止
     */
    public static final Integer STATUS_DISABLE = 0;

    /**
     * 用户id
     */
    @TableId(value = "uid", type = IdType.AUTO)
    private Integer uid;

    /**
     * 分享码，推荐商户入驻，分享VIP卡,邀请合伙人等
     */
    private String shareCode;

    /**
     * 用户账户(跟accout一样)
     */
    private String username;


    /**
     * 用户账号
     */
    private String account;


    /**
     * 用户密码（跟pwd）
     */
    private String password;


    /**
     * 用户密码
     */
    private String pwd;


    /**
     * 真实姓名
     */
    private String realName;


    /**
     * 生日
     */
    private Integer birthday;

    /**
     *分享购买状态
     */
    private String sharePay;


    /**
     * 身份证号码
     */
    private String cardId;


    /**
     * 用户备注
     */
    private String mark;


    /**
     * 合伙人id
     */
    private Integer partnerId;


    /**
     * 用户分组id
     */
    private Integer groupId;


    /**
     * 用户昵称
     */
    private String nickname;


    /**
     * 用户头像
     */
    private String avatar;


    /**
     * 手机号码
     */
    private String phone;


    /**
     * 添加时间
     */
    @TableField(fill = FieldFill.INSERT)
    private Integer addTime;


    /**
     * 添加ip
     */
    private String addIp;


    /**
     * 最后一次登录时间
     */
    private Integer lastTime;


    /**
     * 最后一次登录ip
     */
    private String lastIp;


    /**
     * 用户余额
     */
    private BigDecimal nowMoney;

    /**
     * 呷币
     */
    private BigDecimal xbBalance;

    /**
     * 呷米
     */
    private BigDecimal xiaMi;

    /**
     * 佣金金额
     */
    private BigDecimal brokeragePrice;


    /**
     * 用户剩余积分
     */
    private BigDecimal integral;


    /**
     * 连续签到天数
     */
    private Integer signNum;


    /**
     * 1为正常，0为禁止
     */
    private Integer status;

    /**
     * 合伙人等级
     */
    private Integer partner;

    /**
     * 是否为VIP，0：不是，1：是
     */
    private Integer vip;


    /**
     * 等级
     */
    private Integer level;


    /**
     * 推广元id
     */
    private Integer spreadUid;


    /**
     * 推广员关联时间
     */
    private Integer spreadTime;


    /**
     * 用户类型
     */
    private String userType;


    /**
     * 是否为推广员
     */
    private Integer isPromoter;


    /**
     * 用户购买次数
     */
    private Integer payCount;


    /**
     * 下级人数
     */
    private Integer spreadCount;


    /**
     * 清理会员时间
     */
    private Integer cleanTime;

    /**
     * 会员购买状态
     */
    private String vipBuyStatus;

    /**
     * 会员有效期
     */
    private LocalDateTime vipExpiredTime;

    /**
     * 详细地址
     */
    private String addres;


    /**
     * 管理员编号
     */
    private Integer adminid;


    /**
     * 用户登陆类型，h5,wechat,routine
     */
    private String loginType;

    /**
     *
     * 用户角色, userRole
     */
    private String userRole;

    @TableField(exist = false)
    private Integer grade;

    @TableField(exist = false)
    private  String gradeName;


    @TableField(exist = false)
    private  int mid ;

    @TableField(exist = false)
    private BigDecimal cardIncome;

    @TableField(exist = false)
    private   BigDecimal shareIncome ;

    @TableField(exist = false)
    private BigDecimal storeIncome ;

    @TableField(exist = false)
    private BigDecimal partnerIncome;

    private LocalDateTime createTimes;

    public void copy(YxUser source) {
        BeanUtil.copyProperties(source, this, CopyOptions.create().setIgnoreNullValue(true));
    }

    public boolean isValid() {
        return STATUS_NORMAL.equals(this.status);
    }
}
